﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using OrionApplication.OrionLib.Dao;
using OrionApplication.OrionLib;
using OrionApplication.OrionLib.Orion;

namespace OrionApplication.OrionForm
{
    public partial class MouvementLigneForm : OrionBaseDoubleForm
    {
        public Int32 OrionTeteId = 0;
        public Int32 OrionClientId = 0;

        public MouvementLigneForm() 
            : base()
        {
            dao = new DaoMouvementLigne();
            InitializeComponent();
        }

        public MouvementLigneForm(string titre)
            : base(titre, "Etat")
        {
            dao = new DaoMouvementLigne();
            InitializeComponent();
        }

        private void DupliqueEnregistrement()
        {
            if (kDgv.SelectedRows.Count > 0)
            {
                if (OrionOutils.ChoixOuiNon(OrionConfBase.ConfirmDuplique) == DialogResult.Yes)
                {
                    MouvementLigne m = ((DaoMouvementLigne)dao).SelectById(Convert.ToInt32(kDgv.SelectedRows[0].Cells["OrionId"].Value));
                    m = ((DaoMouvementLigne)dao).Insert(m);
                    this.RempliKDgv();
                    this.FocusSur(m.OrionId);
                }
            }
            else
                OrionOutils.Alerte(OrionConfBase.AucuneLigneSelectionnee);
        }

        private void RempliForm(MouvementLigne m)
        {
            kCbArticle.SelectedValue = Convert.ToInt32(m.OrionArticleId);
            kNudQte.Value = Convert.ToDecimal(m.Quantite);
            kNudPrix.Value = Convert.ToDecimal(m.Prix);
            kTbCommentaire.Text = m.Commentaire;
        }

        private void SauvegardeForm()
        {
            OrionTable OT = new DaoOrionTable().SelectByIdent("EUROPOINT")[0];
            MouvementTete mt = new DaoMouvementTete().SelectById(this.OrionTeteId);
            OrionTable ot2 = new DaoOrionTable().SelectById(mt.OrionMouvementId);

            MouvementLigne m = this.RempliObject();
            if (kLblMode.Text == OrionConfBase.OrionModeInsert)
            {
                m = ((DaoMouvementLigne)dao).Insert(m);

                if (ot2.Text2 == "CLIENT")
                {
                    // Gestion des points de fidélités
                    OrionLib.Point p = new OrionLib.Point();
                    p.OrionMouvementLigneId = m.OrionId;
                    p.Quantite = m.Prix * m.Quantite * OT.Double1 * ot2.Double2;
                    new DaoPoint().Insert(p);
                }
            }
            else
            {
                if (kDgv.SelectedRows.Count > 0)
                {
                    m.OrionId = Convert.ToInt32(kDgv.SelectedRows[0].Cells["OrionId"].Value);
                    m = ((DaoMouvementLigne)dao).Update(m);
                    if (ot2.Text2 == "CLIENT")
                    {
                        // Gestion des points de fidélités
                        OrionLib.Point p = new DaoPoint().SelectByMouvementId(m.OrionId);
                        p.Quantite = m.Prix * m.Quantite * OT.Double1 * ot2.Double2;
                        new DaoPoint().Update(p);
                    }
                }
                else
                    OrionOutils.Alerte(OrionConfBase.AucuneLigneSelectionnee);
            }

            this.RempliKDgv();
            this.FocusSur(m.OrionId);
        }

        private MouvementLigne RempliObject()
        {
            MouvementLigne m = new MouvementLigne();
            m.OrionArticleId = Convert.ToInt32(kCbArticle.SelectedValue);
            m.Quantite = Convert.ToInt32(kNudQte.Value);
            m.Prix = Convert.ToDouble(kNudPrix.Value);
            m.Commentaire = kTbCommentaire.Text;
            m.OrionTeteId = this.OrionTeteId;
            return m;
        }

        public void RowEnter()
        {
            if (kDgv.SelectedRows.Count > 0)
            {
                MouvementLigne m = ((DaoMouvementLigne)dao).SelectById(Convert.ToInt32(kDgv.SelectedRows[0].Cells["OrionId"].Value));
                this.RempliForm(m);
            }
        }

        #region Gestion Article
        public void RempliArticle()
        {
            kCbArticle.DataSource = new DaoArticle().SelectAllActif();
        }

        public void RecupPrixArticle()
        {
            DaoMouvementTete dmt = new DaoMouvementTete();
            DaoOrionTable dt = new DaoOrionTable();
            String typeMvt = dt.SelectById(dmt.SelectById(this.OrionTeteId).OrionMouvementId).Text2;
            Article a = new DaoArticle().SelectById(Convert.ToInt32(kCbArticle.SelectedValue));
            if(typeMvt == "CLIENT")
                this.kNudPrix.Value = Convert.ToDecimal(a.PrixVente);
            else if(typeMvt == "FOURNISSEUR")
                this.kNudPrix.Value = Convert.ToDecimal(a.PrixAchat);
        }

        public void CalculPrixLigne()
        {
            kNudTot.Value = kNudPrix.Value * kNudQte.Value;
        }

        private void kNudQte_ValueChanged(object sender, EventArgs e)
        {
            CalculPrixLigne();
        }

        private void kCbArticle_SelectedValueChanged(object sender, EventArgs e)
        {
            RecupPrixArticle();
        }
        #endregion

        /// <summary>
        /// Permet de remplir le grid avec le DAO en cours
        /// </summary>
        public override void RempliKDgv()
        {


            if (this.OrionClientId != 0)
            {
                DataSet ds = ((DaoMouvementLigne)dao).SelectAllClientDSView(this.OrionClientId);
                if (ds.Tables.Count > 0)
                {
                    kDgv.DataSource = ds.Tables[0];
                    kDgv.Columns["OrionId"].Visible = false;
                    kDgv.Columns["OrionTeteId"].Visible = false;
                    kDgv.Columns["CodeClient"].Visible = false;
                }
            }
            else if (this.OrionTeteId != 0)
            {
                DataSet ds = ((DaoMouvementLigne)dao).SelectAllTeteDSView(this.OrionTeteId);
                if (ds.Tables.Count > 0)
                {
                    kDgv.DataSource = ds.Tables[0];
                    kDgv.Columns["OrionId"].Visible = false;
                    kDgv.Columns["OrionTeteId"].Visible = false;
                    kDgv.Columns["CodeClient"].Visible = false;
                }
            }
            else
            {
                DataSet ds = ((DaoMouvementTete)dao).SelectAllDSView();
                if (ds.Tables.Count > 0)
                {
                    kDgv.DataSource = ds.Tables[0];
                    kDgv.Columns["OrionId"].Visible = false;
                    kDgv.Columns["OrionTeteId"].Visible = false;
                    kDgv.Columns["CodeClient"].Visible = false;
                }
            }
        }

        private void btnSpecGoToArticle_Click(object sender, EventArgs e)
        {
            ArticleForm cf = new ArticleForm("Gestion des articles");
            cf.MdiParent = this.MdiParent;
            cf.NameFormA = "ArticleForm";
            cf.Show();
            cf.FocusSur(Convert.ToInt32(this.kCbArticle.SelectedValue));
        }
    }
}
